﻿#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
//
//
////void swaqnums(int nums[], int sz)
////{
////	int left = 0;
////	int right = sz - 1;
////	while (left < right)
////	{
////		while (nums[left] % 2 != 0 && left < right)
////		{
////			left++;
////		}
////		while (nums[right] % 2 != 1 && left < right)
////		{
////			right--;
////		}
////		if (nums[left] % 2 == 0 && nums[right] % 2 == 1 )
////		{
////			int tmp = nums[left];
////			nums[left] = nums[right];
////			nums[right] = tmp;
////		}
////	}
////}
////int main()
////{
////	int nums[] = { 1,8,4,2,0,1,8,5,4,0,5 };
////	int sz = sizeof(nums) / sizeof(nums[0]);
////	swaqnums(nums, sz);
////	for (int i = 0; i < sz; i++)
////	{
////		printf("%d ",nums[i]);
////	}
////	system("pause");
////}
//
//
//
////单链表实现队列
//typedef int STDataType;
//typedef struct QueueNode
//{
//	struct QueueNode* next;
//	STDataType data;
//}QN;
//
//
////使用两个指针记录一个头一个尾
//struct Queue
//{
//	struct QueueNode* head;
//	struct QueueNode* tail;
//	int sz;
//};
//
////队列初始化
//void Queueinit(struct Queue* sq)
//{
//	sq->head = sq->tail = NULL;
//	sq->sz = 0;
//}
//
////队列添加
//void QueuePush(struct Queue* sq, STDataType x)
//{
//	QN* newnode = (QN*)malloc(sizeof(QN));
//	if (newnode == NULL)
//	{
//		assert(newnode);
//	}
//	newnode->next = NULL;
//	newnode->data = x;
//	if (sq->head == NULL)
//	{
//		sq->head = sq->tail = newnode;
//		sq->sz++;
//	}
//	else
//	{
//		sq->tail->next = newnode;
//		sq->tail = sq->tail->next;
//		sq->sz++;
//	}
//}
//
////队列删除
//void QueuePop(struct Queue* sq)
//{
//	assert(sq);
//	assert(sq->sz > 0);
//	//如果只剩下一个元素时
//	if (sq->head->next == NULL)
//	{
//		free(sq ->head);
//		sq->head = sq->tail = NULL;
//		sq->sz--;
//	}
//	else
//	{
//		QN* tmp = sq->head->next;
//		free(sq->head);
//		sq->head = tmp;
//		sq->sz--;
//	}
//}
//
////获得队列首元素
//STDataType QueueTop(struct Queue* sq)
//{
//	assert(sq);
//	assert(sq->sz > 0);
//	return sq->head->data;
//}
//
////获得队列尾元素
//STDataType QueueBack(struct Queue* sq)
//{
//	assert(sq);
//	assert(sq->sz > 0);
//	return sq->tail->data;
//}
//
//
////判断队列是否为空
////空返回非0（真） 非空返回0
//int Queueempty(struct Queue* sq)
//{
//	assert(sq);
//	//等于0返回真 不等于0返回假
//	return sq->sz == 0 ;
//}
//
//
////获取队列元素个数
//int Queuenumber(struct Queue* sq)
//{
//	assert(sq);
//	return sq->sz;
//}
//
////销毁每个节点并释放内存
//void Queuedestroy(struct Queue* sq)
//{
//	assert(sq);
//	while (sq->head)
//	{
//		if (sq->head->next = NULL)
//		{
//			free(sq->head);
//			sq->head = sq->tail = NULL;
//		}
//		else
//		{
//			QN* tmp = sq->head->next;
//			free(sq->head);
//			sq->head = tmp;
//		}
//	}
//	sq->head = sq->tail = NULL;
//	sq->sz = 0;
//}
//
//
//
//typedef struct {
//	struct Queue q1;
//	struct Queue q2;
//} MyStack;
//
//
////先获得一个栈
//MyStack* myStackCreate() {
//	MyStack* newnode = (MyStack*)malloc(sizeof(MyStack));
//	if (newnode == NULL)
//	{
//		assert(newnode);
//	}
//	//先初始化两个队列
//	Queueinit(&newnode->q1);
//	Queueinit(&newnode->q2);
//	return newnode;
//}
//
////栈使用两个队列导入数组
//void myStackPush(MyStack* obj, int x) {
//	//往为空那个队列导数组
//	if (!Queueempty(&obj->q1))
//	{
//		QueuePush(&obj->q1, x);
//	}
//	else
//	{
//		QueuePush(&obj->q2, x);
//	}
//}
//
////导去为空的队列，直到最后一个元素前一个，把最后一个删除
//int myStackPop(MyStack* obj)
//{
//	struct Queue* empty = &obj->q1;
//	struct Queue* newnode = &obj->q2;
//	if (!Queueempty(&obj->q1))
//	{
//		empty = &obj->q2;
//		newnode = &obj->q1;
//	}
//	//导数组
//	while (Queuenumber(newnode)>1)
//	{
//		QueuePush(empty, QueueTop(newnode));
//		QueuePop(newnode);
//	}
//	STDataType pos = QueueTop(newnode);
//	QueuePop(newnode);
//	return pos;
//}
//
//int myStackTop(MyStack* obj) {
//	if (!Queueempty(&obj->q1))
//	{
//		return QueueBack(&obj->q1);
//	}
//	else
//	{
//		return QueueBack(&obj->q2);
//	}
//}
//
//bool myStackEmpty(MyStack* obj) {
//	return Queueempty(&obj->q1) && Queueempty(&obj->q2);
//}
//
//void myStackFree(MyStack* obj) {
//	Queuedestroy(&obj->q1);
//	Queuedestroy(&obj->q2);
//	free(obj);
//	obj = NULL;
//}
//
//
//int main()
//{
//	MyStack* obj = myStackCreate();
//	myStackPush(obj,1);
//	myStackPush(obj,2);
//	/*myStackPush(obj,3);
//	myStackPush(obj,4);
//	myStackPush(obj,5);*/
//	int pos = myStackTop(obj);
//	printf("%d\n", pos);
//	myStackPop(obj);
//	system("pause");
//}
//
//
////void test()
////{
////	struct Queue SQ;
////	Queueinit(&SQ);
////	QueuePush(&SQ, 1);
////	QueuePush(&SQ, 2);
////	QueuePush(&SQ, 3);
////	QueuePush(&SQ, 4);
////	QueuePush(&SQ, 5);
////	QueuePush(&SQ, 6);
////	QueuePush(&SQ, 7);
////	
////
////	STDataType x = QueueBack(&SQ);
////	printf("%d\n", x);
////	////获得元素个数
////	//int number = Queuenumber(&SQ);
////	//printf("该队列有：%d 个元素\n", number);
////	//while (!(Queueempty(&SQ)))
////	//{
////	//	STDataType x = QueueTop(&SQ);
////	//	printf("%d ", x);
////	//	QueuePop(&SQ);
////	//}
////	//printf("\n");
////	//number = Queuenumber(&SQ);
////	//printf("该队列有：%d 个元素\n", number);
////	//Queuedestroy(&SQ);
////}
////
////
////int main()
////{
////	test();
////	system("pause");
////}


//KiKi得到了两个n行m列的矩阵，他想知道两个矩阵是否相等，请你回答他。(当两个矩阵对应数组元素都相等时两个矩阵相等)。
//
//输入描述：
//第一行包含两个整数n和m，表示两个矩阵包含n行m列，用空格分隔。
//
//从2到n + 1行，每行输入m个整数（范围 - 231~231 - 1），用空格分隔，共输入n * m个数，表示第一个矩阵中的元素。
//
//从n + 2行到2n + 1，每行输入m个整数（范围 - 231~231 - 1），用空格分隔，共输入n * m个数，表示第二个矩阵中的元素。
//1 < n, m < 10
//    输出描述：
//    一行，如果两个矩阵相等输出"Yes"并换行，否则输出"No"并换行

//两个数组都是n*m个数
//该题意思就是每个数组元素是否相等，相等则是yes，反之no
//int main()
//{
//
//    int n, m;
//
//    scanf("%d %d", &n, &m);
//
//    int arr[10][10];
//    int brr[10][10];
//    int flag = 1;
//
//    for (int i = 0; i < n; i++)
//    {
//        for (int j = 0; j < m; j++)
//        {
//            scanf("%d", &arr[i][j]);
//        }
//    }
//
//    for (int i = 0; i < n; i++)
//    {
//        for (int j = 0; j < m; j++)
//        {
//            scanf("%d", &brr[i][j]);
//        }
//    }
//
//    for (int i = 0; i < n; i++)
//    {
//        for (int j = 0; j < m; j++)
//        {
//            if (arr[i][j] != brr[i][j])
//            {
//                flag = 0;
//            }
//        }
//    }
//
//    if (flag == 1)
//    {
//        printf("Yes\n");
//    }
//    else
//    {
//        printf("No\n");
//    }
//    system("pause");
//
//    return 0;
//}


//描述
//有一个整数序列（可能有重复的整数），现删除指定的某一个整数，输出删除指定数字之后的序列，序列中未被删除数字的前后位置没有发生改变。
//
//数据范围：序列长度和序列中的值都满足
//1≤n≤50
//输入描述：
//第一行输入一个整数(0≤N≤50)。
//
//第二行输入N个整数，输入用空格分隔的N个整数。
//
//第三行输入想要进行删除的一个整数。
//
//输出描述：
//输出为一行，删除指定数字之后的序列。


//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int arr[51] = { 0 };
//	int i = 0;
//	for (i = 0; i < n; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	int k = 0;
//	scanf("%d", &k);
//	int j = 0;
//	for (i = 0; i < n; i++)
//	{
//         //投机取巧法：
//		if (arr[i] != k)
//		{
//			printf("%d ", arr[i]);
//	    }
//		//不等于k的直接放前面
//		/*if (arr[i] != k )
//		{
//			arr[j++] = arr[i];
//		}*/
//	}
//	
//	for (i = 0; i < j; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	system("pause");
//}

//int main() {
//    int n = 0;
//    scanf("%d",&n);
//    int arr[100] = {0};
//    for (int i = 0; i < n; i++)
//    {
//
//        scanf("%d", &arr[i]);
//    }
//    int k = 0;
//    scanf("%d", &k);
//    int count = 0;
//    int i = 0;
//    for (i = 0; i < n; i++)
//    {
//        if (arr[i] == k && i <n)
//        {
//            int j = 0;
//            for (j=i; j < n-1; j++)
//            {
//                 arr[j] = arr[j + 1];
//            }           
//            count++;
//        }
//    }
//    if (arr[i] == k)
//    {
//        count++;
//    }
//    for (i = 0; i < n - count; i++)
//    {
//        printf("%d ", arr[i]);
//    }
//    system("pause");
//    return 0;
//}

//#include <stdio.h>
//
//int isyear(int x)
//{
//    return (((x % 4 == 0) && (x % 100 != 0)) || (x % 400 == 0));
//}
//int main() {
//    int month[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
//    int year = 0; //年
//    int mt = 0; //月
//    scanf("%d %d", &year, &mt);
//    if (isyear(year))
//    {
//        month[1] += 1;
//    }
//    printf("%d", month[mt - 1]);
//    system("pause");
//    return 0;
//}


//int main() {
//    float price = 0.0f;
//    int month = 0;//月份
//    int data = 0; //日期
//    int ticket = 0;
//    double sum = 0.0;
//    scanf("%f %d %d %d", &price, &month, &data, &ticket);
//    if (month == 12 && data == 12)
//    {
//        sum = price * 0.8;
//        if (ticket == 1)
//        {
//            sum = sum - 50.0;
//        }
//    }
//    else if (month == 11 && data == 11)
//    {
//        sum = price * 0.7;
//        if (ticket == 1)
//        {
//            sum = sum - 50.0;
//        }
//    }
//    printf("%.2lf", sum);
//    system("pause");
//    return 0;
//}

int main()
{
	float price = 0.0f;
	float sum = 0.0f;
	int month = 0;
	int data = 0;
	int tiket = 0;
	scanf("%f %d %d %d", &price, &month, &data, &tiket);
	if (month == 12 && data == 12)
	{
		sum = price * 0.8f;
	}
	else if (month == 11 && data == 11)
	{
		sum = price * 0.7f;
	}
	if (tiket == 1)
	{
		if (sum < 50)
			sum = 0;
		else
			sum -= 50;
	}
	printf("%.2f", sum);
	system("pause");
}